iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
自我挑戰組

Kotlin & Flutter App 開發比較思考日誌系列 第 29

[鐵人賽 Day 29] Kotlin & Flutter 比較 JSON 轉換為 data class 的方式

  • 分享至 

  • xImage
  •  

目的

比較 Kotlin & Flutter 接收到 JSON 格式資料轉換為 data class 的方式

例子

由JSON 字串 {"name":"Alice", "age": 40} 轉換至 UserData data class

Kotlin


接收到 JSON 格式資料轉換為 data class

步驟說明:

  1. 匯入 kotlinx.serialization.Serializable 套件,將 data class 序列化,而可以由 JSON 格式字串轉換至此 data class。

  2. 宣告 UserData data class 和其建構子

    • 建構子宣告 name 為字串屬性變數,age 為整數屬性變數
    • @Serializable 代表將 data class 序列化
  3. 匯入 kotlinx.serialization.json.Jsonkotlinx.serialization.decodeFromString 套件

    • 使用 Json.decodeFromString 函式將 JSON 字串 {"name":"Alice", "age": 40} 轉換為 UserData data class,並將最終轉換結果儲存在 userInfo 變數。
import kotlinx.serialization.Serializable
import kotlinx.serialization.json.Json
import kotlinx.serialization.decodeFromString

@Serializable
data class UserData(val name: String, val age: Int)

fun main() {
   val userInfo = Json.decodeFromString<UserData>("""{"name":"Alice", "age": 40}""")
}

Flutter


步驟說明:

  1. 宣告 UserData data class:

    • 宣告 name 為字串屬性變數,age 為整數屬性變數
    • 建立 UserData.fromJson 建構子:接收到 Map<String, dynamic>屬性變數後,透過 key value 取出對應的資料後,儲存到變數中。
      EX:json['name'] 取出 "Alice" 後,存入 name 字串變數
  2. 接收到 JSON 格式資料轉換為 UserData data class

    • 匯入 UserData data class 和 Flutter官方套件 dart:convert
    • 透過 dart:convertjsonDecode 函式,將 JSON 格式的字串轉換為 Map<String, dynamic>屬性後,儲存到 userMap 變數。
      EX:可由 userInfo['name'] 取出 "Alice"
    • UserData.fromJson 建構子將 Map<String, dynamic> 屬性 JSON 資料轉換為 UserData data class,將最終轉換結果儲存在 userInfo 變數。

1.獨立檔案:宣告 data class

class UserData {
  String name;
  Int age;
  
  UserData(this.name,this.age);
  UserData.fromJson(Map<String, dynamic> json)
      : name = json['name'],
        age = int.parse(json['age']);
}

2. 接收到 JSON 格式資料轉換為 data class

import 'dart:convert';

///需匯入 data class

const jsonString = '{"name":"Alice", "age": 40}';

Map<String, dynamic> userMap = jsonDecode(jsonString);
var userInfo = UserData.fromJson(userMap);

參考資料

  • Kotlin Serialization:https://kotlinlang.org/docs/serialization.html#example-json-serialization

  • Flutter JSON and serialization:https://docs.flutter.dev/data-and-backend/serialization/json


上一篇
[鐵人賽 Day 28] Kotlin & Flutter WebView 元件 - 如何知道 WebView 曾開啟的歷史頁面
下一篇
[鐵人賽 Day 30] Kotlin & Flutter App 開發比較思考日誌 - 完賽心得 & 未來規劃
系列文
Kotlin & Flutter App 開發比較思考日誌30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言